from sqlalchemy import Column, Integer, String, Text, DateTime, func

from logger.log_config import logger
from mapper.base import Base, SessionLocal


class Thread(Base):
    __tablename__ = "threads"

    id = Column(Integer, primary_key=True, autoincrement=True)  # 主键，自增
    resume_url = Column(String(255), nullable=False)  # 用户上传简历的 URL
    job_description = Column(Text, nullable=False)  # 用户提供的岗位 JD 信息
    questions = Column(Text)  # 生成的参考问题
    resume_summary = Column(Text)  # 后端生成的简历摘要
    position = Column(String(255))  # 岗位名称
    company = Column(String(255))  # 公司名称
    last_updated = Column(DateTime, default=func.now(), onupdate=func.now())  # 最后更新时间（自动更新）

    def __repr__(self):
        return (
            f"<Thread(id={self.id}, resume_url={self.resume_url}, "
            f"job_description={self.job_description}, resume_summary={self.resume_summary}, "
            f"position='{self.position}', company='{self.company}', last_updated={self.last_updated})>"
        )


def create_thread(resume_url: str, job_description: str, position: str = None, company: str = None,
                  resume_summary: str = None, questions: str = None):
    # 创建一个数据库会话
    session = SessionLocal()

    try:
        # 创建 Thread 实体对象
        new_thread = Thread(
            resume_url=resume_url,
            job_description=job_description,
            position=position,
            company=company,
            questions=questions,
            resume_summary=resume_summary
        )

        # 插入数据到数据库
        session.add(new_thread)
        session.commit()  # 提交事务

        # 刷新对象，获取新增记录的 ID
        session.refresh(new_thread)
        logger.info(f"线程记录已成功创建！ID 为 {new_thread.id}")

        # 返回已创建的记录
        return new_thread
    except Exception as e:
        session.rollback()  # 回滚事务
        logger.info(f"创建线程记录失败：{e}")
    finally:
        session.close()  # 确保关闭会话


def get_thread_by_id(thread_id: int):
    """
    根据 ID 查询 Thread 记录。

    :param thread_id: 要查询的 Thread 的 ID。
    :return: 查询到的 Thread 对象或 None（如果未找到记录）。
    """
    # 创建一个数据库会话
    session = SessionLocal()
    try:
        # 根据 ID 查询 Thread 记录（主键查询）
        thread = session.query(Thread).filter(Thread.id == thread_id).first()

        if thread:
            logger.info(f"成功查询到线程记录：{thread}")
            return thread
        else:
            logger.info(f"未找到 ID 为 {thread_id} 的线程记录")
            return None
    except Exception as e:
        logger.error(f"查询线程记录失败：{e}")
        return None
    finally:
        session.close()  # 确保关闭会话


